/**
 * 单例设计模式：确保每个类只有一个实例，而且自行实例化并向整个系统提供这个实例。
 * 特点：
 *  (1)单例类只能有一个实例
 *  (2)单例类必须自己创建自己的唯一实例
 *  (3)单例类能够给其他对象提供这一实例
 * 实现方式：
 *  (1)懒汉式：用的时候在new,线程不安全。要改进线程安全可以在getSingleton的时候加上synchronized 。
 *            但是在
 *      @see  CreationModel.SingletonModel.LazySingleton
 *  (2)饿汉式：在类进行初始化之前，就已经实现实例化
 *      在类的创建的同时就已经提供了一个静态对象供系统使用，天生线程安全，如果没有使用这个实例，会造成浪费空间
 *      @see CreationModel.SingletonModel.HungrySingleton
 *  (3)双检查 (double check)
 *      @see CreationModel.SingletonModel.DoubleCheckSingleton
 *      优化原因：因为懒汉式，在获取实例的时候，每次都要加锁，获取锁。因此会导致开销大，因此这种模式不建议使用。
 *      优点：double check在懒汉式的基础上，不用每次都去获取锁，第一次执行getInstacne时单例对象被初始化，效率高
 *      缺点：在多线程的情况下可能会导致实例化对象不止一个，因此，在使用双检查的时候我们最好加上volatile关键字。
 *  (4)静态内部类（推荐使用）
 *      @see CreationModel.SingletonModel.StaticInternalSingleton
 *      当第一次加载Singleton类是不会初始化instance,只有在第一次调用Singleton的getInstance方法时才会实例化。
 *      优点：能够确保线程安全，保证单例对象的唯一性，同时延迟了实例的初始化。
 *  (5) 枚举单例
 *      @see CreationModel.SingletonModel.EnumSingleton
 *      在Effive java 中提出
 * @author 王蕾 [wanglei_dev@cyou-inc.com]
 * @date 2017-11-24 14:23:00
 */
package CreationModel.SingletonModel;